Introduction

This is the replication notebook for Lab-08 from the course SOC 4650/5650: Introduction to GISc.

Load Dependencies

The following code loads the package dependencies for our analysis:

# tidyverse packages
library(dplyr)      # data wrangling

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
# spatial packages
library(mapview)    # preview spatial data
library(sf)         # spatial data tools
library(tidycensus) # data wrangling
library(tigris)     # data wrangling

# other packages
library(here)       # file path tools

Part 1

Question 1

First, we’ll download and preview the variables using the load_variables() function from tidycensus.

acs <- load_variables(2018, "acs5", cache = TRUE)

The variable represents “PUBLIC ASSISTANCE INCOME OR FOOD STAMPS/SNAP IN THE PAST 12 MONTHS FOR HOUSEHOLDS”.

Question 2

First, we’ll download the relevant ACS data using get_acs(). We get the data for all counties by specifying "county" as the geography:

snapCounties <- get_acs(geography = "county", year = 2018, state = 29, variable = "B19058_002", survey = "acs5")
Getting data from the 2014-2018 5-year ACS

Question 3

Now we’ll download geometric data to go along with our tabular data. We’ll start by downloading the county boundary data and converting it to an sf object. The video shows you how to do this process in two steps:

counties <- counties(state = 29, cb = FALSE)
counties <- st_as_sf(counties)

However, there is now an option within tigris to do it in a single call:

counties <- counties(state = 29, cb = FALSE, class = "sf")

This makes it just a bit quicker to get mappable results. We can preview our shapefile with mapview:

mapview(counties)

Question 4

Next, we’ll clean and merge our data. First, we’ll clean our county geometry data, retaining only the GEOID column:

counties <- select(counties, GEOID)

Then we’ll tidy up the demographic data:

snapCounties %>%
  rename(
    snap = estimate,
    snap_moe = moe
  ) %>%
  select(-variable) -> snapCounties

Finally, we’ll combine our data:

snapCounties <- left_join(counties, snapCounties, by = "GEOID")

Again, we’ll preview our data with mapview:

mapview(snapCounties, zcol = "snap")

The zcol argument allows us to map the values of a particular variable as part of our preview.

Finally, we’ll write these data as a .shp file:

st_write(snapCounties, dsn = here("data", "MO_SNAP_Households", "MO_SNAP_Households.shp"), delete_dsn = TRUE)

Part 2

Question 5

First, we’ll download the relevant ACS data using get_acs(). We get the data for all tracts by specifying "tract" as the geography and specifying 189 for the county argument:

snapTracts <- get_acs(geography = "tract", year = 2018, state = 29, county = 189, variable = "B19058_002", survey = "acs5")
Getting data from the 2014-2018 5-year ACS

Question 6

Now we’ll download geometric data to go along with our tabular data:

tracts <- tracts(state = 29, county = 189, cb = FALSE, class = "sf")

  |                                                                                                                                                                                 
  |                                                                                                                                                                           |   0%
  |                                                                                                                                                                                 
  |=                                                                                                                                                                          |   0%
  |                                                                                                                                                                                 
  |=                                                                                                                                                                          |   1%
  |                                                                                                                                                                                 
  |==                                                                                                                                                                         |   1%
  |                                                                                                                                                                                 
  |===                                                                                                                                                                        |   2%
  |                                                                                                                                                                                 
  |====                                                                                                                                                                       |   2%
  |                                                                                                                                                                                 
  |====                                                                                                                                                                       |   3%
  |                                                                                                                                                                                 
  |=====                                                                                                                                                                      |   3%
  |                                                                                                                                                                                 
  |======                                                                                                                                                                     |   3%
  |                                                                                                                                                                                 
  |======                                                                                                                                                                     |   4%
  |                                                                                                                                                                                 
  |=======                                                                                                                                                                    |   4%
  |                                                                                                                                                                                 
  |========                                                                                                                                                                   |   4%
  |                                                                                                                                                                                 
  |========                                                                                                                                                                   |   5%
  |                                                                                                                                                                                 
  |=========                                                                                                                                                                  |   5%
  |                                                                                                                                                                                 
  |==========                                                                                                                                                                 |   6%
  |                                                                                                                                                                                 
  |===========                                                                                                                                                                |   6%
  |                                                                                                                                                                                 
  |===========                                                                                                                                                                |   7%
  |                                                                                                                                                                                 
  |============                                                                                                                                                               |   7%
  |                                                                                                                                                                                 
  |=============                                                                                                                                                              |   7%
  |                                                                                                                                                                                 
  |=============                                                                                                                                                              |   8%
  |                                                                                                                                                                                 
  |==============                                                                                                                                                             |   8%
  |                                                                                                                                                                                 
  |===============                                                                                                                                                            |   9%
  |                                                                                                                                                                                 
  |================                                                                                                                                                           |   9%
  |                                                                                                                                                                                 
  |================                                                                                                                                                           |  10%
  |                                                                                                                                                                                 
  |=================                                                                                                                                                          |  10%
  |                                                                                                                                                                                 
  |==================                                                                                                                                                         |  10%
  |                                                                                                                                                                                 
  |==================                                                                                                                                                         |  11%
  |                                                                                                                                                                                 
  |===================                                                                                                                                                        |  11%
  |                                                                                                                                                                                 
  |====================                                                                                                                                                       |  12%
  |                                                                                                                                                                                 
  |=====================                                                                                                                                                      |  12%
  |                                                                                                                                                                                 
  |=====================                                                                                                                                                      |  13%
  |                                                                                                                                                                                 
  |======================                                                                                                                                                     |  13%
  |                                                                                                                                                                                 
  |=======================                                                                                                                                                    |  13%
  |                                                                                                                                                                                 
  |=======================                                                                                                                                                    |  14%
  |                                                                                                                                                                                 
  |========================                                                                                                                                                   |  14%
  |                                                                                                                                                                                 
  |=========================                                                                                                                                                  |  14%
  |                                                                                                                                                                                 
  |=========================                                                                                                                                                  |  15%
  |                                                                                                                                                                                 
  |==========================                                                                                                                                                 |  15%
  |                                                                                                                                                                                 
  |===========================                                                                                                                                                |  16%
  |                                                                                                                                                                                 
  |============================                                                                                                                                               |  16%
  |                                                                                                                                                                                 
  |============================                                                                                                                                               |  17%
  |                                                                                                                                                                                 
  |=============================                                                                                                                                              |  17%
  |                                                                                                                                                                                 
  |==============================                                                                                                                                             |  17%
  |                                                                                                                                                                                 
  |==============================                                                                                                                                             |  18%
  |                                                                                                                                                                                 
  |===============================                                                                                                                                            |  18%
  |                                                                                                                                                                                 
  |================================                                                                                                                                           |  19%
  |                                                                                                                                                                                 
  |=================================                                                                                                                                          |  19%
  |                                                                                                                                                                                 
  |=================================                                                                                                                                          |  20%
  |                                                                                                                                                                                 
  |==================================                                                                                                                                         |  20%
  |                                                                                                                                                                                 
  |===================================                                                                                                                                        |  20%
  |                                                                                                                                                                                 
  |===================================                                                                                                                                        |  21%
  |                                                                                                                                                                                 
  |====================================                                                                                                                                       |  21%
  |                                                                                                                                                                                 
  |=====================================                                                                                                                                      |  21%
  |                                                                                                                                                                                 
  |=====================================                                                                                                                                      |  22%
  |                                                                                                                                                                                 
  |======================================                                                                                                                                     |  22%
  |                                                                                                                                                                                 
  |======================================                                                                                                                                     |  23%
  |                                                                                                                                                                                 
  |=======================================                                                                                                                                    |  23%
  |                                                                                                                                                                                 
  |========================================                                                                                                                                   |  23%
  |                                                                                                                                                                                 
  |========================================                                                                                                                                   |  24%
  |                                                                                                                                                                                 
  |=========================================                                                                                                                                  |  24%
  |                                                                                                                                                                                 
  |==========================================                                                                                                                                 |  24%
  |                                                                                                                                                                                 
  |==========================================                                                                                                                                 |  25%
  |                                                                                                                                                                                 
  |===========================================                                                                                                                                |  25%
  |                                                                                                                                                                                 
  |============================================                                                                                                                               |  26%
  |                                                                                                                                                                                 
  |=============================================                                                                                                                              |  26%
  |                                                                                                                                                                                 
  |=============================================                                                                                                                              |  27%
  |                                                                                                                                                                                 
  |==============================================                                                                                                                             |  27%
  |                                                                                                                                                                                 
  |===============================================                                                                                                                            |  27%
  |                                                                                                                                                                                 
  |===============================================                                                                                                                            |  28%
  |                                                                                                                                                                                 
  |================================================                                                                                                                           |  28%
  |                                                                                                                                                                                 
  |=================================================                                                                                                                          |  28%
  |                                                                                                                                                                                 
  |=================================================                                                                                                                          |  29%
  |                                                                                                                                                                                 
  |==================================================                                                                                                                         |  29%
  |                                                                                                                                                                                 
  |===================================================                                                                                                                        |  30%
  |                                                                                                                                                                                 
  |====================================================                                                                                                                       |  30%
  |                                                                                                                                                                                 
  |====================================================                                                                                                                       |  31%
  |                                                                                                                                                                                 
  |=====================================================                                                                                                                      |  31%
  |                                                                                                                                                                                 
  |======================================================                                                                                                                     |  31%
  |                                                                                                                                                                                 
  |======================================================                                                                                                                     |  32%
  |                                                                                                                                                                                 
  |=======================================================                                                                                                                    |  32%
  |                                                                                                                                                                                 
  |========================================================                                                                                                                   |  32%
  |                                                                                                                                                                                 
  |========================================================                                                                                                                   |  33%
  |                                                                                                                                                                                 
  |=========================================================                                                                                                                  |  33%
  |                                                                                                                                                                                 
  |==========================================================                                                                                                                 |  34%
  |                                                                                                                                                                                 
  |===========================================================                                                                                                                |  34%
  |                                                                                                                                                                                 
  |===========================================================                                                                                                                |  35%
  |                                                                                                                                                                                 
  |============================================================                                                                                                               |  35%
  |                                                                                                                                                                                 
  |=============================================================                                                                                                              |  36%
  |                                                                                                                                                                                 
  |==============================================================                                                                                                             |  36%
  |                                                                                                                                                                                 
  |===============================================================                                                                                                            |  37%
  |                                                                                                                                                                                 
  |================================================================                                                                                                           |  37%
  |                                                                                                                                                                                 
  |================================================================                                                                                                           |  38%
  |                                                                                                                                                                                 
  |=================================================================                                                                                                          |  38%
  |                                                                                                                                                                                 
  |==================================================================                                                                                                         |  38%
  |                                                                                                                                                                                 
  |==================================================================                                                                                                         |  39%
  |                                                                                                                                                                                 
  |===================================================================                                                                                                        |  39%
  |                                                                                                                                                                                 
  |====================================================================                                                                                                       |  40%
  |                                                                                                                                                                                 
  |=====================================================================                                                                                                      |  40%
  |                                                                                                                                                                                 
  |=====================================================================                                                                                                      |  41%
  |                                                                                                                                                                                 
  |======================================================================                                                                                                     |  41%
  |                                                                                                                                                                                 
  |=======================================================================                                                                                                    |  41%
  |                                                                                                                                                                                 
  |=======================================================================                                                                                                    |  42%
  |                                                                                                                                                                                 
  |========================================================================                                                                                                   |  42%
  |                                                                                                                                                                                 
  |=========================================================================                                                                                                  |  42%
  |                                                                                                                                                                                 
  |=========================================================================                                                                                                  |  43%
  |                                                                                                                                                                                 
  |==========================================================================                                                                                                 |  43%
  |                                                                                                                                                                                 
  |===========================================================================                                                                                                |  44%
  |                                                                                                                                                                                 
  |============================================================================                                                                                               |  44%
  |                                                                                                                                                                                 
  |============================================================================                                                                                               |  45%
  |                                                                                                                                                                                 
  |=============================================================================                                                                                              |  45%
  |                                                                                                                                                                                 
  |==============================================================================                                                                                             |  45%
  |                                                                                                                                                                                 
  |==============================================================================                                                                                             |  46%
  |                                                                                                                                                                                 
  |===============================================================================                                                                                            |  46%
  |                                                                                                                                                                                 
  |================================================================================                                                                                           |  47%
  |                                                                                                                                                                                 
  |=================================================================================                                                                                          |  47%
  |                                                                                                                                                                                 
  |=================================================================================                                                                                          |  48%
  |                                                                                                                                                                                 
  |==================================================================================                                                                                         |  48%
  |                                                                                                                                                                                 
  |===================================================================================                                                                                        |  48%
  |                                                                                                                                                                                 
  |===================================================================================                                                                                        |  49%
  |                                                                                                                                                                                 
  |====================================================================================                                                                                       |  49%
  |                                                                                                                                                                                 
  |=====================================================================================                                                                                      |  50%
  |                                                                                                                                                                                 
  |======================================================================================                                                                                     |  50%
  |                                                                                                                                                                                 
  |======================================================================================                                                                                     |  51%
  |                                                                                                                                                                                 
  |=======================================================================================                                                                                    |  51%
  |                                                                                                                                                                                 
  |========================================================================================                                                                                   |  51%
  |                                                                                                                                                                                 
  |========================================================================================                                                                                   |  52%
  |                                                                                                                                                                                 
  |=========================================================================================                                                                                  |  52%
  |                                                                                                                                                                                 
  |==========================================================================================                                                                                 |  52%
  |                                                                                                                                                                                 
  |==========================================================================================                                                                                 |  53%
  |                                                                                                                                                                                 
  |===========================================================================================                                                                                |  53%
  |                                                                                                                                                                                 
  |============================================================================================                                                                               |  54%
  |                                                                                                                                                                                 
  |=============================================================================================                                                                              |  54%
  |                                                                                                                                                                                 
  |=============================================================================================                                                                              |  55%
  |                                                                                                                                                                                 
  |==============================================================================================                                                                             |  55%
  |                                                                                                                                                                                 
  |===============================================================================================                                                                            |  55%
  |                                                                                                                                                                                 
  |===============================================================================================                                                                            |  56%
  |                                                                                                                                                                                 
  |================================================================================================                                                                           |  56%
  |                                                                                                                                                                                 
  |=================================================================================================                                                                          |  56%
  |                                                                                                                                                                                 
  |=================================================================================================                                                                          |  57%
  |                                                                                                                                                                                 
  |==================================================================================================                                                                         |  57%
  |                                                                                                                                                                                 
  |===================================================================================================                                                                        |  58%
  |                                                                                                                                                                                 
  |====================================================================================================                                                                       |  58%
  |                                                                                                                                                                                 
  |====================================================================================================                                                                       |  59%
  |                                                                                                                                                                                 
  |=====================================================================================================                                                                      |  59%
  |                                                                                                                                                                                 
  |======================================================================================================                                                                     |  59%
  |                                                                                                                                                                                 
  |======================================================================================================                                                                     |  60%
  |                                                                                                                                                                                 
  |=======================================================================================================                                                                    |  60%
  |                                                                                                                                                                                 
  |========================================================================================================                                                                   |  61%
  |                                                                                                                                                                                 
  |=========================================================================================================                                                                  |  61%
  |                                                                                                                                                                                 
  |=========================================================================================================                                                                  |  62%
  |                                                                                                                                                                                 
  |==========================================================================================================                                                                 |  62%
  |                                                                                                                                                                                 
  |===========================================================================================================                                                                |  62%
  |                                                                                                                                                                                 
  |===========================================================================================================                                                                |  63%
  |                                                                                                                                                                                 
  |============================================================================================================                                                               |  63%
  |                                                                                                                                                                                 
  |=============================================================================================================                                                              |  64%
  |                                                                                                                                                                                 
  |==============================================================================================================                                                             |  64%
  |                                                                                                                                                                                 
  |==============================================================================================================                                                             |  65%
  |                                                                                                                                                                                 
  |===============================================================================================================                                                            |  65%
  |                                                                                                                                                                                 
  |================================================================================================================                                                           |  65%
  |                                                                                                                                                                                 
  |================================================================================================================                                                           |  66%
  |                                                                                                                                                                                 
  |=================================================================================================================                                                          |  66%
  |                                                                                                                                                                                 
  |==================================================================================================================                                                         |  66%
  |                                                                                                                                                                                 
  |==================================================================================================================                                                         |  67%
  |                                                                                                                                                                                 
  |===================================================================================================================                                                        |  67%
  |                                                                                                                                                                                 
  |====================================================================================================================                                                       |  68%
  |                                                                                                                                                                                 
  |=====================================================================================================================                                                      |  68%
  |                                                                                                                                                                                 
  |=====================================================================================================================                                                      |  69%
  |                                                                                                                                                                                 
  |======================================================================================================================                                                     |  69%
  |                                                                                                                                                                                 
  |=======================================================================================================================                                                    |  69%
  |                                                                                                                                                                                 
  |=======================================================================================================================                                                    |  70%
  |                                                                                                                                                                                 
  |========================================================================================================================                                                   |  70%
  |                                                                                                                                                                                 
  |=========================================================================================================================                                                  |  71%
  |                                                                                                                                                                                 
  |==========================================================================================================================                                                 |  71%
  |                                                                                                                                                                                 
  |==========================================================================================================================                                                 |  72%
  |                                                                                                                                                                                 
  |===========================================================================================================================                                                |  72%
  |                                                                                                                                                                                 
  |============================================================================================================================                                               |  72%
  |                                                                                                                                                                                 
  |============================================================================================================================                                               |  73%
  |                                                                                                                                                                                 
  |=============================================================================================================================                                              |  73%
  |                                                                                                                                                                                 
  |==============================================================================================================================                                             |  74%
  |                                                                                                                                                                                 
  |===============================================================================================================================                                            |  74%
  |                                                                                                                                                                                 
  |===============================================================================================================================                                            |  75%
  |                                                                                                                                                                                 
  |================================================================================================================================                                           |  75%
  |                                                                                                                                                                                 
  |=================================================================================================================================                                          |  75%
  |                                                                                                                                                                                 
  |=================================================================================================================================                                          |  76%
  |                                                                                                                                                                                 
  |==================================================================================================================================                                         |  76%
  |                                                                                                                                                                                 
  |===================================================================================================================================                                        |  76%
  |                                                                                                                                                                                 
  |===================================================================================================================================                                        |  77%
  |                                                                                                                                                                                 
  |====================================================================================================================================                                       |  77%
  |                                                                                                                                                                                 
  |=====================================================================================================================================                                      |  78%
  |                                                                                                                                                                                 
  |======================================================================================================================================                                     |  78%
  |                                                                                                                                                                                 
  |======================================================================================================================================                                     |  79%
  |                                                                                                                                                                                 
  |=======================================================================================================================================                                    |  79%
  |                                                                                                                                                                                 
  |========================================================================================================================================                                   |  79%
  |                                                                                                                                                                                 
  |========================================================================================================================================                                   |  80%
  |                                                                                                                                                                                 
  |=========================================================================================================================================                                  |  80%
  |                                                                                                                                                                                 
  |==========================================================================================================================================                                 |  80%
  |                                                                                                                                                                                 
  |==========================================================================================================================================                                 |  81%
  |                                                                                                                                                                                 
  |===========================================================================================================================================                                |  81%
  |                                                                                                                                                                                 
  |============================================================================================================================================                               |  82%
  |                                                                                                                                                                                 
  |=============================================================================================================================================                              |  82%
  |                                                                                                                                                                                 
  |=============================================================================================================================================                              |  83%
  |                                                                                                                                                                                 
  |==============================================================================================================================================                             |  83%
  |                                                                                                                                                                                 
  |===============================================================================================================================================                            |  83%
  |                                                                                                                                                                                 
  |===============================================================================================================================================                            |  84%
  |                                                                                                                                                                                 
  |================================================================================================================================================                           |  84%
  |                                                                                                                                                                                 
  |=================================================================================================================================================                          |  85%
  |                                                                                                                                                                                 
  |==================================================================================================================================================                         |  85%
  |                                                                                                                                                                                 
  |==================================================================================================================================================                         |  86%
  |                                                                                                                                                                                 
  |===================================================================================================================================================                        |  86%
  |                                                                                                                                                                                 
  |====================================================================================================================================================                       |  86%
  |                                                                                                                                                                                 
  |====================================================================================================================================================                       |  87%
  |                                                                                                                                                                                 
  |=====================================================================================================================================================                      |  87%
  |                                                                                                                                                                                 
  |======================================================================================================================================================                     |  88%
  |                                                                                                                                                                                 
  |=======================================================================================================================================================                    |  88%
  |                                                                                                                                                                                 
  |=======================================================================================================================================================                    |  89%
  |                                                                                                                                                                                 
  |========================================================================================================================================================                   |  89%
  |                                                                                                                                                                                 
  |=========================================================================================================================================================                  |  89%
  |                                                                                                                                                                                 
  |=========================================================================================================================================================                  |  90%
  |                                                                                                                                                                                 
  |==========================================================================================================================================================                 |  90%
  |                                                                                                                                                                                 
  |===========================================================================================================================================================                |  90%
  |                                                                                                                                                                                 
  |===========================================================================================================================================================                |  91%
  |                                                                                                                                                                                 
  |============================================================================================================================================================               |  91%
  |                                                                                                                                                                                 
  |=============================================================================================================================================================              |  92%
  |                                                                                                                                                                                 
  |==============================================================================================================================================================             |  92%
  |                                                                                                                                                                                 
  |==============================================================================================================================================================             |  93%
  |                                                                                                                                                                                 
  |===============================================================================================================================================================            |  93%
  |                                                                                                                                                                                 
  |================================================================================================================================================================           |  93%
  |                                                                                                                                                                                 
  |================================================================================================================================================================           |  94%
  |                                                                                                                                                                                 
  |=================================================================================================================================================================          |  94%
  |                                                                                                                                                                                 
  |==================================================================================================================================================================         |  94%
  |                                                                                                                                                                                 
  |==================================================================================================================================================================         |  95%
  |                                                                                                                                                                                 
  |===================================================================================================================================================================        |  95%
  |                                                                                                                                                                                 
  |====================================================================================================================================================================       |  96%
  |                                                                                                                                                                                 
  |=====================================================================================================================================================================      |  96%
  |                                                                                                                                                                                 
  |=====================================================================================================================================================================      |  97%
  |                                                                                                                                                                                 
  |======================================================================================================================================================================     |  97%
  |                                                                                                                                                                                 
  |=======================================================================================================================================================================    |  98%
  |                                                                                                                                                                                 
  |========================================================================================================================================================================   |  98%
  |                                                                                                                                                                                 
  |========================================================================================================================================================================   |  99%
  |                                                                                                                                                                                 
  |=========================================================================================================================================================================  |  99%
  |                                                                                                                                                                                 
  |========================================================================================================================================================================== |  99%
  |                                                                                                                                                                                 
  |========================================================================================================================================================================== | 100%
  |                                                                                                                                                                                 
  |===========================================================================================================================================================================| 100%

We can preview our shapefile with mapview:

mapview(tracts)

Question 7

Next, we’ll clean and merge our data. First, we’ll clean our county geometry data, retaining only the GEOID column:

tracts <- select(tracts, GEOID)

Then we’ll tidy up the demographic data:

snapTracts %>%
  rename(
    snap = estimate,
    snap_moe = moe
  ) %>%
  select(-variable) -> snapTracts

Finally, we’ll combine our data:

snapTracts <- left_join(tracts, snapTracts, by = "GEOID")

Again, we’ll preview our data with mapview:

mapview(snapTracts, zcol = "snap")

Finally, we’ll write these data as a .shp file:

st_write(snapTracts, dsn = here("data", "STL_SNAP_Households", "STL_SNAP_Households.shp"), delete_dsn = TRUE)
LS0tCnRpdGxlOiAiTGFiIDA4IFJlcGxpY2F0aW9uIE5vdGVib29rIgphdXRob3I6ICJDaHJpc3RvcGhlciBQcmVuZXIsIFBoLkQuIgpkYXRlOiAnKGByIGZvcm1hdChTeXMudGltZSgpLCAiJUIgJWQsICVZIilgKScKb3V0cHV0OiAKICBnaXRodWJfZG9jdW1lbnQ6IGRlZmF1bHQKICBodG1sX25vdGVib29rOiBkZWZhdWx0IAotLS0KCiMjIEludHJvZHVjdGlvbgpUaGlzIGlzIHRoZSByZXBsaWNhdGlvbiBub3RlYm9vayBmb3IgTGFiLTA4IGZyb20gdGhlIGNvdXJzZSBTT0MgNDY1MC81NjUwOiBJbnRyb2R1Y3Rpb24gdG8gR0lTYy4gCgojIyBMb2FkIERlcGVuZGVuY2llcwpUaGUgZm9sbG93aW5nIGNvZGUgbG9hZHMgdGhlIHBhY2thZ2UgZGVwZW5kZW5jaWVzIGZvciBvdXIgYW5hbHlzaXM6CgpgYGB7ciBwYWNrYWdlLWxvYWR9CiMgdGlkeXZlcnNlIHBhY2thZ2VzCmxpYnJhcnkoZHBseXIpICAgICAgIyBkYXRhIHdyYW5nbGluZwoKIyBzcGF0aWFsIHBhY2thZ2VzCmxpYnJhcnkobWFwdmlldykgICAgIyBwcmV2aWV3IHNwYXRpYWwgZGF0YQpsaWJyYXJ5KHNmKSAgICAgICAgICMgc3BhdGlhbCBkYXRhIHRvb2xzCmxpYnJhcnkodGlkeWNlbnN1cykgIyBkYXRhIHdyYW5nbGluZwpsaWJyYXJ5KHRpZ3JpcykgICAgICMgZGF0YSB3cmFuZ2xpbmcKCiMgb3RoZXIgcGFja2FnZXMKbGlicmFyeShoZXJlKSAgICAgICAjIGZpbGUgcGF0aCB0b29scwpgYGAKCiMjIFBhcnQgMQojIyMgUXVlc3Rpb24gMQpGaXJzdCwgd2UnbGwgZG93bmxvYWQgYW5kIHByZXZpZXcgdGhlIHZhcmlhYmxlcyB1c2luZyB0aGUgYGxvYWRfdmFyaWFibGVzKClgIGZ1bmN0aW9uIGZyb20gYHRpZHljZW5zdXNgLgoKYGBge3IgcHJldmlldy12YXJzfQphY3MgPC0gbG9hZF92YXJpYWJsZXMoMjAxOCwgImFjczUiLCBjYWNoZSA9IFRSVUUpCmBgYAoKVGhlIHZhcmlhYmxlIHJlcHJlc2VudHMgIlBVQkxJQyBBU1NJU1RBTkNFIElOQ09NRSBPUiBGT09EIFNUQU1QUy9TTkFQIElOIFRIRSBQQVNUIDEyIE1PTlRIUyBGT1IgSE9VU0VIT0xEUyIuCgojIyMgUXVlc3Rpb24gMgpGaXJzdCwgd2UnbGwgZG93bmxvYWQgdGhlIHJlbGV2YW50IEFDUyBkYXRhIHVzaW5nIGBnZXRfYWNzKClgLiBXZSBnZXQgdGhlIGRhdGEgZm9yIGFsbCBjb3VudGllcyBieSBzcGVjaWZ5aW5nIGAiY291bnR5ImAgYXMgdGhlIGdlb2dyYXBoeToKCmBgYHtyIGRvd25sb2FkLXNuYXAtY291bnRpZXN9CnNuYXBDb3VudGllcyA8LSBnZXRfYWNzKGdlb2dyYXBoeSA9ICJjb3VudHkiLCB5ZWFyID0gMjAxOCwgc3RhdGUgPSAyOSwgdmFyaWFibGUgPSAiQjE5MDU4XzAwMiIsIHN1cnZleSA9ICJhY3M1IikKYGBgCgojIyMgUXVlc3Rpb24gMwpOb3cgd2UnbGwgZG93bmxvYWQgZ2VvbWV0cmljIGRhdGEgdG8gZ28gYWxvbmcgd2l0aCBvdXIgdGFidWxhciBkYXRhLiBXZSdsbCBzdGFydCBieSBkb3dubG9hZGluZyB0aGUgY291bnR5IGJvdW5kYXJ5IGRhdGEgYW5kIGNvbnZlcnRpbmcgaXQgdG8gYW4gc2Ygb2JqZWN0LiBUaGUgdmlkZW8gc2hvd3MgeW91IGhvdyB0byBkbyB0aGlzIHByb2Nlc3MgaW4gdHdvIHN0ZXBzOgoKYGBgcgpjb3VudGllcyA8LSBjb3VudGllcyhzdGF0ZSA9IDI5LCBjYiA9IEZBTFNFKQpjb3VudGllcyA8LSBzdF9hc19zZihjb3VudGllcykKYGBgCgpIb3dldmVyLCB0aGVyZSBpcyBub3cgYW4gb3B0aW9uIHdpdGhpbiBgdGlncmlzYCB0byBkbyBpdCBpbiBhIHNpbmdsZSBjYWxsOgoKYGBge3IgZG93bmxvYWQtY291bnRpZXN9CmNvdW50aWVzIDwtIGNvdW50aWVzKHN0YXRlID0gMjksIGNiID0gRkFMU0UsIGNsYXNzID0gInNmIikKYGBgCgpUaGlzIG1ha2VzIGl0IGp1c3QgYSBiaXQgcXVpY2tlciB0byBnZXQgbWFwcGFibGUgcmVzdWx0cy4gV2UgY2FuIHByZXZpZXcgb3VyIHNoYXBlZmlsZSB3aXRoIGBtYXB2aWV3YDoKCmBgYHtyIHByZXZpZXctY291bnRpZXN9Cm1hcHZpZXcoY291bnRpZXMpCmBgYAoKIyMjIFF1ZXN0aW9uIDQKTmV4dCwgd2UnbGwgY2xlYW4gYW5kIG1lcmdlIG91ciBkYXRhLiBGaXJzdCwgd2UnbGwgY2xlYW4gb3VyIGNvdW50eSBnZW9tZXRyeSBkYXRhLCByZXRhaW5pbmcgb25seSB0aGUgYEdFT0lEYCBjb2x1bW46CgpgYGB7ciBjbGVhbi1jb3VudGllc30KY291bnRpZXMgPC0gc2VsZWN0KGNvdW50aWVzLCBHRU9JRCkKYGBgCgpUaGVuIHdlJ2xsIHRpZHkgdXAgdGhlIGRlbW9ncmFwaGljIGRhdGE6CgpgYGB7ciBjbGVhbi1zbmFwfQpzbmFwQ291bnRpZXMgJT4lCiAgcmVuYW1lKAogICAgc25hcCA9IGVzdGltYXRlLAogICAgc25hcF9tb2UgPSBtb2UKICApICU+JQogIHNlbGVjdCgtdmFyaWFibGUpIC0+IHNuYXBDb3VudGllcwpgYGAKCkZpbmFsbHksIHdlJ2xsIGNvbWJpbmUgb3VyIGRhdGE6CgpgYGB7ciBqb2luLWNvdW50aWVzfQpzbmFwQ291bnRpZXMgPC0gbGVmdF9qb2luKGNvdW50aWVzLCBzbmFwQ291bnRpZXMsIGJ5ID0gIkdFT0lEIikKYGBgCgpBZ2Fpbiwgd2UnbGwgcHJldmlldyBvdXIgZGF0YSB3aXRoIGBtYXB2aWV3YDoKCmBgYHtyIHByZXZpZXctam9pbmVkLWNvdW50aWVzfQptYXB2aWV3KHNuYXBDb3VudGllcywgemNvbCA9ICJzbmFwIikKYGBgCgpUaGUgYHpjb2xgIGFyZ3VtZW50IGFsbG93cyB1cyB0byBtYXAgdGhlIHZhbHVlcyBvZiBhIHBhcnRpY3VsYXIgdmFyaWFibGUgYXMgcGFydCBvZiBvdXIgcHJldmlldy4KCkZpbmFsbHksIHdlJ2xsIHdyaXRlIHRoZXNlIGRhdGEgYXMgYSBgLnNocGAgZmlsZToKCmBgYHtyIHdyaXRlLWNvdW50aWVzfQpzdF93cml0ZShzbmFwQ291bnRpZXMsIGRzbiA9IGhlcmUoImRhdGEiLCAiTU9fU05BUF9Ib3VzZWhvbGRzIiwgIk1PX1NOQVBfSG91c2Vob2xkcy5zaHAiKSwgZGVsZXRlX2RzbiA9IFRSVUUpCmBgYAoKIyMgUGFydCAyCiMjIyBRdWVzdGlvbiA1CkZpcnN0LCB3ZSdsbCBkb3dubG9hZCB0aGUgcmVsZXZhbnQgQUNTIGRhdGEgdXNpbmcgYGdldF9hY3MoKWAuIFdlIGdldCB0aGUgZGF0YSBmb3IgYWxsIHRyYWN0cyBieSBzcGVjaWZ5aW5nIGAidHJhY3QiYCBhcyB0aGUgZ2VvZ3JhcGh5IGFuZCBzcGVjaWZ5aW5nIGAxODlgIGZvciB0aGUgYGNvdW50eWAgYXJndW1lbnQ6CgpgYGB7ciBkb3dubG9hZC1zbmFwLXRyYWN0c30Kc25hcFRyYWN0cyA8LSBnZXRfYWNzKGdlb2dyYXBoeSA9ICJ0cmFjdCIsIHllYXIgPSAyMDE4LCBzdGF0ZSA9IDI5LCBjb3VudHkgPSAxODksIHZhcmlhYmxlID0gIkIxOTA1OF8wMDIiLCBzdXJ2ZXkgPSAiYWNzNSIpCmBgYAoKIyMjIFF1ZXN0aW9uIDYKTm93IHdlJ2xsIGRvd25sb2FkIGdlb21ldHJpYyBkYXRhIHRvIGdvIGFsb25nIHdpdGggb3VyIHRhYnVsYXIgZGF0YToKCmBgYHtyIGRvd25sb2FkLXRyYWN0c30KdHJhY3RzIDwtIHRyYWN0cyhzdGF0ZSA9IDI5LCBjb3VudHkgPSAxODksIGNiID0gRkFMU0UsIGNsYXNzID0gInNmIikKYGBgCgpXZSBjYW4gcHJldmlldyBvdXIgc2hhcGVmaWxlIHdpdGggYG1hcHZpZXdgOgoKYGBge3IgcHJldmlldy10cmFjdHN9Cm1hcHZpZXcodHJhY3RzKQpgYGAKCiMjIyBRdWVzdGlvbiA3Ck5leHQsIHdlJ2xsIGNsZWFuIGFuZCBtZXJnZSBvdXIgZGF0YS4gRmlyc3QsIHdlJ2xsIGNsZWFuIG91ciBjb3VudHkgZ2VvbWV0cnkgZGF0YSwgcmV0YWluaW5nIG9ubHkgdGhlIGBHRU9JRGAgY29sdW1uOgoKYGBge3IgY2xlYW4tdHJhY3RzfQp0cmFjdHMgPC0gc2VsZWN0KHRyYWN0cywgR0VPSUQpCmBgYAoKVGhlbiB3ZSdsbCB0aWR5IHVwIHRoZSBkZW1vZ3JhcGhpYyBkYXRhOgoKYGBge3IgY2xlYW4tc25hcC10cmFjdHN9CnNuYXBUcmFjdHMgJT4lCiAgcmVuYW1lKAogICAgc25hcCA9IGVzdGltYXRlLAogICAgc25hcF9tb2UgPSBtb2UKICApICU+JQogIHNlbGVjdCgtdmFyaWFibGUpIC0+IHNuYXBUcmFjdHMKYGBgCgpGaW5hbGx5LCB3ZSdsbCBjb21iaW5lIG91ciBkYXRhOgoKYGBge3Igam9pbi10cmFjdHN9CnNuYXBUcmFjdHMgPC0gbGVmdF9qb2luKHRyYWN0cywgc25hcFRyYWN0cywgYnkgPSAiR0VPSUQiKQpgYGAKCkFnYWluLCB3ZSdsbCBwcmV2aWV3IG91ciBkYXRhIHdpdGggYG1hcHZpZXdgOgoKYGBge3IgcHJldmlldy1qb2luZWQtdHJhY3RzfQptYXB2aWV3KHNuYXBUcmFjdHMsIHpjb2wgPSAic25hcCIpCmBgYAoKRmluYWxseSwgd2UnbGwgd3JpdGUgdGhlc2UgZGF0YSBhcyBhIGAuc2hwYCBmaWxlOgoKYGBge3Igd3JpdGUtdHJhY3RzfQpzdF93cml0ZShzbmFwVHJhY3RzLCBkc24gPSBoZXJlKCJkYXRhIiwgIlNUTF9TTkFQX0hvdXNlaG9sZHMiLCAiU1RMX1NOQVBfSG91c2Vob2xkcy5zaHAiKSwgZGVsZXRlX2RzbiA9IFRSVUUpCmBgYAo=